package com.xie.leetcode.array;

//506. 相对名次
//        给出 N 名运动员的成绩，找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”，“银牌” 和“ 铜牌”（"Gold Medal", "Silver Medal", "Bronze Medal"）。
//
//        (注：分数越高的选手，排名越靠前。)
//
//        示例 1:
//
//        输入: [5, 4, 3, 2, 1]
//        输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
//        解释: 前三名运动员的成绩为前三高的，因此将会分别被授予 “金牌”，“银牌”和“铜牌” ("Gold Medal", "Silver Medal" and "Bronze Medal").
//        余下的两名运动员，我们只需要通过他们的成绩计算将其相对名次即可。
//        提示:
//
//        N 是一个正整数并且不会超过 10000。
//        所有运动员的成绩都不相同。

import java.util.Arrays;
import java.util.HashMap;

/**
 * @author xiezhendong
 * @date 2021/11/29
 */
public class FindRelativeRanks {

    public static void main(String[] args) {
        FindRelativeRanks findRelativeRanks = new FindRelativeRanks();
        System.out.println(Arrays.toString(findRelativeRanks.findRelativeRanks(new int[]{5, 4, 3, 2, 1})));
    }

    public String[] findRelativeRanks(int[] score) {
        int len = score.length;
        String[] rank = new String[len];
        int[] x = score.clone();
        Arrays.sort(score);
        HashMap<Integer, String> map = new HashMap<>();
        if (len > 3) {
            for (int i = len - 4; i >= 0; --i) {
                map.put(score[i], len - i + "");
            }
            map.put(score[len - 1], "Gold Medal");
            map.put(score[len - 2], "Silver Medal");
            map.put(score[len - 3], "Bronze Medal");
        } else {
            if (len == 1) {
                map.put(score[0], "Gold Medal");
            } else if (len == 2) {
                map.put(score[0], "Silver Medal");
                map.put(score[1], "Gold Medal");
            } else {
                map.put(score[0], "Bronze Medal");
                map.put(score[1], "Silver Medal");
                map.put(score[2], "Gold Medal");
            }
        }

        for (int i = 0; i < len; i++) {
            rank[i] = map.get(x[i]);
        }
        return rank;
    }
}
